
#include "CompileAndRun.hpp"
#include "../comm/httplib.h"

using namespace ns_compile_and_run;
using namespace httplib;

int main(int argc, char *argv[])
{
    PrintToScreen();
    // SaveToFile();

    if (argc != 2)
    {
        std::cout << "Usage: \n\t" << argv[0] << " port" << std::endl;
        return 1;
    }

    Server svr;

    // svr.Get("/test",
    //         [](const Request &req, Response &resp)
    //         {
    //             resp.set_content("hello, good night! 晚上好", "text/plain;charset=utf-8");
    //         });

    // svr.set_base_dir()

    svr.Post("/compile_and_run", [](const Request &req, Response &resp)
             {

                std::string in_json = req.body;
                std::string out_json;
                if( !in_json.empty())
                {
                    ComplieAndRun::Start(in_json, &out_json);
                    //  设置响应内容和响应类型
                    resp.set_content(out_json, "application/json;charset=utf-8");
                } });

    svr.listen("0", atoi(argv[1]));

    // std::string injson;
    // Json::Value in_val;
    // in_val["code"] = R"(#include <iostream>
    // int main()
    // {
    //     std::cout << "hello, i'm a test!" << std::endl;

    //     //  内存限制测试
    //     // int *p = new int[1024  * 1024 * 40];

    //     //  时间限制测试
    //     // while(1);

    //     // int *p = nullptr;
    //     // *p = 1;

    //     int a = 10;
    //     a /= 0;

    //     cca
    //     return 0;
    // })";
    // in_val["input"] = "";
    // in_val["cpulimit"] = 1;
    // in_val["memlimit"] = 1024 * 20; // 1024 kb

    // Json::FastWriter writer;
    // injson = writer.write(in_val);

    // std::cout << injson << std::endl;

    // std::string outjson;

    // ComplieAndRun::Start(injson, &outjson);

    // std::cout << outjson << std::endl;

    return 0;
}